Videos form an increasingly important part of people's photographic collections. In many cases the owner of a video will wish to make that video available to a user on a computer which is different from the computer on which the video resides. In some cases this is because the user owns more than one computer and wants to be able to view the video anywhere. In other cases the owner wishes to share the video with other individuals. There are currently two methods in use for accessing videos which are on other computers. In the first method the full video file is moved from one computer to the other and then played. This method has the disadvantage of making the user wait for the transfer to complete before seeing the video. Because video files are often large, this delay can be long. In the second method, called “streaming” a video can be transferred to another computer and played in one step. The advantage to the user in streaming the video is that no delay is experienced between requesting the video and viewing it. The standard format for sending video streams, RTSP, allows a user to interact with the video playback (for example, by pausing the playback or rewinding the stream) so that the user has the illusion of playing a video file located locally. Streaming has an additional advantage in that the owner of the video does not give up control over the video file itself, since the actual file is not transferred. Therefore, a person can share a video without having to worry that recipients will themselves share the video with other people.
Many internet sites exist which allow a user to upload videos to a central server which can then stream those videos to other computers. The best known is “youtube”. Although these websites are popular, they do force people to go to the trouble of uploading each video they wish to share. Furthermore, because providing storage for large numbers of videos is expensive, video sharing sites limit the length and resolution of the videos which can be uploaded.
A more convenient way of sharing videos would be to take advantage of peer-to-peer networking. In a peer-to-peer network each computer on the network is in direct contact with all other computers on the network. Each of these computers (called “nodes”) can act as either a client or a server as required. In a peer-to-peer network videos do not have to be uploaded because each file can be made accessible by the network wherever it resides.
Several well-known technologies for creating peer-to-peer networks exist, but implementations of these technologies tend to use them for transferring files rather than for streaming. Existing systems which do implement peer-to-peer streaming have the disadvantage of tightly integrating the streaming technology with the peer-to-peer technology. This tight integration has some disadvantages. Some of these disadvantages stem from the lack of standardization of video formats. Many file formats exist for storing videos. Examples are mpeg, mov, avi, and wma formats. In addition, all of these file formats support multiple encodings of the video data, with each encoding requiring a separate coding/decoding module (“CODEC”). Some of these formats and encodings are open, while others are proprietary. To work effectively, both the stream server (which reads in the files) and the stream client (which displays the resulting stream) must have access to the proper CODEC for the particular video stream, which puts significant constraints on the design of the components of the peer-to-peer system.